﻿using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

using System.ComponentModel;
using ObjModel = System.Collections.ObjectModel;

using PermDoc.DB;

namespace PermDoc.Ctrl.Docs
{
    public class Topic : INotifyPropertyChanged
    {
        #region Members
        
        public event PropertyChangedEventHandler PropertyChanged;

        public int ИД { get; set; }
        public string No { get; set; }
        public DocState Статус { get; set; }
        public string StatusColor
        {
            get
            {
                if (Статус == DocState.Черновик)
                    return "DarkGray";
                else if (Статус == DocState.Неопределен)
                    return "CornflowerBlue";
                else if (Статус == DocState.Ожидает_утверждения)
                    return "DarkGoldenrod";
                else if (Статус == DocState.Утвержден)
                    return "Green";
                return "Black";
            }
        }
        public DateTime? Создан { get; set; }
        public DateTime? Изменён { get; set; }
        public string Автор { get; set; }
        public string Редактор { get; set; }
        public Shop Магазин { get; set; }
        public Kontragent Контрагент { get; set; }
        public DateTime? Дата_Док { get; set; }
        public string N_Док { get; set; }
        public ObjModel::ObservableCollection<Topic> ChildTopics { get; set; }
        public bool IsVisible { get; set; }
        public string ImgUrl { get; set; }
        public string ImgUrlFavorites
        {
            get
            {
                if(IsFavorites)
                    return @"http://sp.korablik.local/_layouts/images/star.png";
                return @"";
            }
        }
        public string Tooltip { get; set; }
        public bool IsFavorites
        {
            get
            {
                if (FavoritesValue <= 0)
                    return false;
                return true;
            }
        }
        protected Double _FavoritesValue = 0;
        public Double FavoritesValue
        {
            get
            {
                return _FavoritesValue;
            }
            set
            {
                _FavoritesValue = value;
                NotifyPropertyChanged("FavoritesValue");
            }
        }
        #endregion
        #region Constructors
        public Topic()
        {
            _FavoritesValue = 0;
            IsVisible = true;
            ChildTopics = new ObjModel::ObservableCollection<Topic>();
            ImgUrl = @"http://sp.korablik.local/staff/images/download.jpg";
        }
        public Topic(string title, int parID)
            : this()
        {
            ИД = parID;
            No = title;
        }
        public Topic(Topic src)
            : this()
        {
            this.Copy(src);
        }
        public Topic(DocItem src)
            : this()
        {
            this.Copy(src);
        }
        #endregion
        #region Events
        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this,
                    new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion
        #region Methods
        public void Copy(Topic src)
        {
            ИД = src.ИД;
            No = src.No;
            Статус = src.Статус;
            Создан = src.Создан;
            Изменён = src.Изменён;
            Автор = src.Автор;
            Редактор = src.Редактор;
            Магазин = src.Магазин;
            Контрагент = src.Контрагент;
            Дата_Док = src.Дата_Док;
            N_Док = src.N_Док;
            IsVisible = src.IsVisible;
            ImgUrl = src.ImgUrl;
            Tooltip = "";
            ChildTopics.Clear();
            foreach (Topic o in src.ChildTopics)
            {
                ChildTopics.Add(new Topic(o));
            }
        }
        public void Copy(DocItem src)
        {
            ИД = src.ID;
            No = src.Title;
            Статус = src.State;
            Создан = src.Created;
            Изменён = src.Modified;
            Автор = src.Author;
            Редактор = src.Editor;
            Магазин = src.Shop;
            Контрагент = src.Kontragent;
            Дата_Док = src.DocDate;
            N_Док = src.DocNum;
            ChildTopics.Clear();
        }
        #endregion
    }
}
